
                     
                    (  )

                ,      
    (  PE) ,    
   .
               ,
 ,  .  ,       .
        .

        ,    3 ,    
 : ?, ?  ?.
      -   ,     PE
 .    ,       ,    
     .
       -    ,      
 ,        .  ,  
 ;  ,        .
               ,       
     ,  , 
 ,  ,      .

                                   

                 PE  
 .    -  ,                
 -        ,         
     .  ,        
   ,      ,           
 .
     :      ,    
 ,     .      
 ,          .  
   ,  ,          
 ,           ,  
  ,   .

               (),
       ( ),      .
            PE ,
              ().    
           ,   
 ,   .

       ,       
  ,  ,    .

         ,              
  .
       ,    ,        ,   
       PE   ,           
        ,  . - 
       ,  -      
  ,  ..

     ,      5 :
     1.   PE      ;  
        , ,   
   /,    .     
  .
     2.      (        ),
            . 
     ,     , 
     .      ,      
   .       
      ,    .
     3.           : ,  ,
     .             
 .               -   
   .
     4.     (    ), 
   ,        
  .
     5.        ;      ; 
             ;
    .

                         

         ,  ,        : 
          ,     
    .         ,   ,
     .         ,
 ,  --      .
               :      , 
    ,      .         
 ,    - .        .
 :    ,       (- ),
   ?
            : ,   ,  
 ,       ,   . 
       jxx, call  ..  , ,  
     ,       ,   
  .

                 .
           ,  
       .      jmptable',  
   .
              ,  ,
 ,             .
         ,        .   , 
      -.     .
       ,              -
    ,      --  -    
 .    :      , 
         .

                                  

                    ,    
  .

 -  PE    (    ..)
 -         
         
 -    :
   1.    PE  
   2.  
 -  PE ,      ,
           ..
 -  
 -  
 -  
 -  
 -        ( push ebp/mov ebp,esp)
      --
 -   
 -  ,     " ";
   ,   :    --
   -- ,   ----,
    ,     . (. )
 -    , ,   ..
   ,          (),
           ;
       --   .
         ,    .
 -  ;
        NOP'    
 -        
 -   
 -   
   (.. rva,      );
        ,
         
 -   (     )
 -    
 -     ,   
 -   ,    

              "  PE  "  /  "
 "?   ,      ,   
            .
 ,      pe_header+28h (28h=EntryPointRva)  
   FLAG_DWORD   FLAG_RVA,   ,    , 
   FLAG_LABEL  FLAG_CREF.

       ?

 1. ,   ,    RVA  FIXUP'.
 2. RVA,   ,    .
 3. FIXUP,   ,    RVA,  + IMAGEBASE,
           .
 4.   DELTA,       .
 5. 
 6.  

         ,            .  ,   
            (rva 
 fixup'),          call/jmp.  ,    
             .    
 ,         ,  00 00, FF FF, F4 (hlt), CD
 (int),    ..,     ,    PE  
 .   -     
     ""    "",     .  
          (jmp,call,jxx,jecxz,...),       
     -  ,             
   .       , 
    RET  JMP.

     ,    ,      
 .  ,    ,      (label),    
    ,  hll .  
 -  .   .   .

    avpbase.dll:
    100050D3  83E904            sub     ecx, 4
    100050D6  720C              jb      100050E4
    100050D8  83E003            and     eax, 3
    100050DB  03C8              add     ecx,eax
    100050DD  FF2485F0500010    jmp     dword ptr [100050F0+eax*4]      (1)
    100050E4  FF248DE8510010    jmp     dword ptr [100051E8+ecx*4]
    100050EB  90                nop
    100050EC  FF248D6C510010    jmp     dword ptr [1000516C+ecx*4]      (2)
    100050F3  90                nop
    100050F4  00510010          dd      10005100
    100050F8  2C510010          dd      1000512C

       ,  100050F0     (2),   
               (1).      ,
   .    ,      (2)    
   ,            .    ,
   ,      100050F4 - 4
   100050EC + 4.  ,     ,
      .

      ,     .

    FAR.EXE:
    004474D8  B8E1C24200        mov     eax,0042C2E1 ; ==42C350-6Fh   ; (1)
    004474DD  6A00              push    00
    004474DF  6800000100        push    00010000
    004474E4  83C06F            add     eax, 6F      ; ==111
    004474E7  50                push    eax
    004474E8  E8AF180100        call    00458D9C
    ...
    0042C2DB  E8B0450200        call    00450890
    0042C2E0  83C408            add     esp, 08                       ; (2)
    0042C2E3  8D9500FFFFFF      lea     edx,[ebp][0FFFFFF00]
    ...
    0042C350  55                push    ebp
    0042C351  8BEC              mov     ebp, esp
    0042C353  833D5054460003    cmp     d,[000465450], 03

     ,        ,     . 
    16-       32-  ,     
 .     .

                                   

           ,  - .  
 ,      , "  ".

             C++,          .
    engine()    , ,   ,
  ,        . 
       kernel (   )    
 engine.cpp  &  .hpp;    .   
       (mutate.cpp),    
     . ,  ,  ,
          ,   
   (hooy),        .      ,
 ,    ,      ,      .  
 ,             ,    RPME,
  RPME    ,       PE
 .

      ,     :

 1.      ;   
     JMP  ,   JMP' -   .
 2.   .
 3.     .

     ,         .     
   (  ).

                              

       ,      ,    . 
 ,           ;     .
   ,        RPME,   .
           ,   32. 
    :     , 
   --  .          
 ,  ..           
      0.      release. 
     (17*SizeOfImage)       ,
    40   / .
         ,            
    "  ".
               ring-0.    -    
     .
       ,      ,
       .      ,      
      ,  .
     ,             ,
   openfile,              
         .    
       .

                               

              .    
 ,       ,  .text, .data
   ..          
 .
         ,     
   (  )  .         
 .

                             

       ,      .      
     ,        
 .
          2 :
 1.      
 2.        
               
   ,              
 "--".
               
   .

       ,       
     ;            
  .

               ()     
 (),       .

             ?    ,   
       CMPSB   .    
 ,   .     .
               .     
 ,    ,   .
       ,      , , 8 ,   
 ,      .   8 
     ,     -- ,  .

       ,               
 ,           ;   
   .

                                                                     Z0MBiE
